{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import os,random,shutil\n",
    "np.random.seed(7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 为Keras模型准备数据集\n",
    "#1，指定一些超参数：\n",
    "FOLDER='E:\\PyProjects\\DataSet\\Small_set_5_Class'\n",
    "train_data_dir=os.path.join(FOLDER,'train')\n",
    "val_data_dir=os.path.join(FOLDER,'test')\n",
    "train_samples_num=400 # train set中全部照片数\n",
    "val_samples_num=100\n",
    "IMG_W,IMG_H,IMG_CH=150,150,3 # 单张图片的大小\n",
    "batch_size=50 # 这儿要保证400和100能除断\n",
    "epochs=50  # 用比较少的epochs数目做演示，节约训练时间\n",
    "class_num=5 # 此处有5个类别\n",
    "\n",
    "save_folder='E:\\PyProjects\\/DataSet\\/FireAI\\/DeepLearning\\/FireAI009' # bottleneck特征保存位置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 400 images belonging to 5 classes.\n"
     ]
    }
   ],
   "source": [
    "# 2，准备训练集，keras有很多Generator可以直接处理图片的加载，增强等操作，封装的非常好\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "train_datagen = ImageDataGenerator( # 单张图片的处理方式，train时一般都会进行图片增强\n",
    "        rescale=1. / 255, # 图片像素值为0-255，此处都乘以1/255，调整到0-1之间\n",
    "        shear_range=0.2, # 斜切\n",
    "        zoom_range=0.2, # 放大缩小范围\n",
    "        horizontal_flip=True) # 水平翻转\n",
    "\n",
    "train_generator = train_datagen.flow_from_directory(# 从文件夹中产生数据流\n",
    "    train_data_dir, # 训练集图片的文件夹\n",
    "    target_size=(IMG_W, IMG_H), # 调整后每张图片的大小\n",
    "    batch_size=batch_size,\n",
    "    class_mode='categorical') # 此处是多分类问题，故而mode是categorical\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 100 images belonging to 5 classes.\n"
     ]
    }
   ],
   "source": [
    "# 3，同样的方式准备测试集\n",
    "val_datagen = ImageDataGenerator(rescale=1. / 255) # 只需要和trainset同样的scale即可，不需增强\n",
    "val_generator = val_datagen.flow_from_directory(\n",
    "        val_data_dir,\n",
    "        target_size=(IMG_W, IMG_H),\n",
    "        batch_size=batch_size,\n",
    "        class_mode='categorical')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 4，构建模型\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dropout, Flatten, Dense\n",
    "from keras import applications\n",
    "from keras import optimizers\n",
    "from keras.models import Model\n",
    "def build_model():\n",
    "    base_model = applications.VGG16(weights='imagenet', include_top=False,input_shape=(IMG_W, IMG_H,IMG_CH))\n",
    "    # 此处我们只需要卷积层不需要全连接层，故而inclue_top=False,一定要设置input_shape，否则后面会报错\n",
    "    # 这一步使用applications模块自带的VGG16函数直接加载了模型和参数，作为我们自己模型的“身子”\n",
    "    \n",
    "    # 下面定义我们自己的分类器，作为我们自己模型的“头”\n",
    "    top_model = Sequential()\n",
    "    top_model.add(Flatten(input_shape=base_model.output_shape[1:])) \n",
    "    top_model.add(Dense(256, activation='relu'))\n",
    "    top_model.add(Dropout(0.5))\n",
    "    top_model.add(Dense(class_num, activation='softmax')) # 多分类问题\n",
    "    \n",
    "    top_model.load_weights(os.path.join(save_folder,'top_FC_model')) \n",
    "    # 上面定义了模型结构，此处要把训练好的参数加载进来，\n",
    "    \n",
    "    my_model = Model(inputs=base_model.input, outputs=top_model(base_model.output)) # 将“身子”和“头”组装到一起\n",
    "    # my_model就是我们组装好的完整的模型，也已经加载了各自的weights\n",
    "    \n",
    "    # 普通的模型需要对所有层的weights进行训练调整，但是此处我们只调整VGG16的后面几个卷积层，所以前面的卷积层要冻结起来\n",
    "    for layer in my_model.layers[:15]: # 15层之前都是不需训练的\n",
    "        layer.trainable = False\n",
    "        \n",
    "    # 模型的配置\n",
    "    my_model.compile(loss='categorical_crossentropy',\n",
    "                  optimizer=optimizers.SGD(lr=1e-4, momentum=0.9), # 使用一个非常小的lr来微调\n",
    "                  metrics=['accuracy'])\n",
    "    return my_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "start to fine-tune my model\n",
      "Epoch 1/50\n",
      "8/8 [==============================] - 124s 16s/step - loss: 0.0170 - acc: 0.9950 - val_loss: 0.2767 - val_acc: 0.9700\n",
      "Epoch 2/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 3.2684e-04 - acc: 1.0000 - val_loss: 0.2694 - val_acc: 0.9700\n",
      "Epoch 3/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 0.0175 - acc: 0.9950 - val_loss: 0.2593 - val_acc: 0.9700\n",
      "Epoch 4/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 0.0044 - acc: 0.9975 - val_loss: 0.2533 - val_acc: 0.9600\n",
      "Epoch 5/50\n",
      "8/8 [==============================] - 132s 17s/step - loss: 0.0079 - acc: 0.9975 - val_loss: 0.2558 - val_acc: 0.9600\n",
      "Epoch 6/50\n",
      "8/8 [==============================] - 145s 18s/step - loss: 0.0349 - acc: 0.9925 - val_loss: 0.2548 - val_acc: 0.9600\n",
      "Epoch 7/50\n",
      "8/8 [==============================] - 135s 17s/step - loss: 0.0013 - acc: 1.0000 - val_loss: 0.2620 - val_acc: 0.9500\n",
      "Epoch 8/50\n",
      "8/8 [==============================] - 136s 17s/step - loss: 0.0084 - acc: 0.9950 - val_loss: 0.2538 - val_acc: 0.9600\n",
      "Epoch 9/50\n",
      "8/8 [==============================] - 132s 17s/step - loss: 5.6198e-04 - acc: 1.0000 - val_loss: 0.2527 - val_acc: 0.9600\n",
      "Epoch 10/50\n",
      "8/8 [==============================] - 132s 16s/step - loss: 0.0135 - acc: 0.9925 - val_loss: 0.2629 - val_acc: 0.9700\n",
      "Epoch 11/50\n",
      "8/8 [==============================] - 132s 16s/step - loss: 0.0090 - acc: 0.9950 - val_loss: 0.2585 - val_acc: 0.9600\n",
      "Epoch 12/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 0.0030 - acc: 0.9975 - val_loss: 0.2623 - val_acc: 0.9500\n",
      "Epoch 13/50\n",
      "8/8 [==============================] - 129s 16s/step - loss: 0.0086 - acc: 0.9950 - val_loss: 0.2583 - val_acc: 0.9600\n",
      "Epoch 14/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 0.0254 - acc: 0.9975 - val_loss: 0.2587 - val_acc: 0.9600\n",
      "Epoch 15/50\n",
      "8/8 [==============================] - 133s 17s/step - loss: 0.0020 - acc: 0.9975 - val_loss: 0.2675 - val_acc: 0.9700\n",
      "Epoch 16/50\n",
      "8/8 [==============================] - 134s 17s/step - loss: 0.0030 - acc: 0.9975 - val_loss: 0.2710 - val_acc: 0.9700\n",
      "Epoch 17/50\n",
      "8/8 [==============================] - 133s 17s/step - loss: 0.0160 - acc: 0.9975 - val_loss: 0.2604 - val_acc: 0.9600\n",
      "Epoch 18/50\n",
      "8/8 [==============================] - 133s 17s/step - loss: 0.0153 - acc: 0.9950 - val_loss: 0.2517 - val_acc: 0.9700\n",
      "Epoch 19/50\n",
      "8/8 [==============================] - 135s 17s/step - loss: 0.0022 - acc: 1.0000 - val_loss: 0.2560 - val_acc: 0.9700\n",
      "Epoch 20/50\n",
      "8/8 [==============================] - 133s 17s/step - loss: 0.0055 - acc: 0.9975 - val_loss: 0.2473 - val_acc: 0.9700\n",
      "Epoch 21/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 6.7693e-04 - acc: 1.0000 - val_loss: 0.2410 - val_acc: 0.9700\n",
      "Epoch 22/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 0.0014 - acc: 1.0000 - val_loss: 0.2373 - val_acc: 0.9700\n",
      "Epoch 23/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 0.0029 - acc: 0.9975 - val_loss: 0.2374 - val_acc: 0.9700\n",
      "Epoch 24/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 0.0011 - acc: 1.0000 - val_loss: 0.2412 - val_acc: 0.9700\n",
      "Epoch 25/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 0.0014 - acc: 1.0000 - val_loss: 0.2462 - val_acc: 0.9700\n",
      "Epoch 26/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 4.1712e-04 - acc: 1.0000 - val_loss: 0.2484 - val_acc: 0.9700\n",
      "Epoch 27/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 0.0036 - acc: 0.9975 - val_loss: 0.2456 - val_acc: 0.9700\n",
      "Epoch 28/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 0.0048 - acc: 0.9975 - val_loss: 0.2404 - val_acc: 0.9600\n",
      "Epoch 29/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 4.6999e-04 - acc: 1.0000 - val_loss: 0.2418 - val_acc: 0.9600\n",
      "Epoch 30/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 0.0040 - acc: 1.0000 - val_loss: 0.2409 - val_acc: 0.9600\n",
      "Epoch 31/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 0.0028 - acc: 0.9975 - val_loss: 0.2391 - val_acc: 0.9600\n",
      "Epoch 32/50\n",
      "8/8 [==============================] - 132s 17s/step - loss: 2.7393e-04 - acc: 1.0000 - val_loss: 0.2393 - val_acc: 0.9700\n",
      "Epoch 33/50\n",
      "8/8 [==============================] - 135s 17s/step - loss: 0.0017 - acc: 1.0000 - val_loss: 0.2418 - val_acc: 0.9700\n",
      "Epoch 34/50\n",
      "8/8 [==============================] - 134s 17s/step - loss: 7.6793e-05 - acc: 1.0000 - val_loss: 0.2429 - val_acc: 0.9700\n",
      "Epoch 35/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 1.0348e-04 - acc: 1.0000 - val_loss: 0.2435 - val_acc: 0.9700\n",
      "Epoch 36/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 6.1680e-04 - acc: 1.0000 - val_loss: 0.2427 - val_acc: 0.9700\n",
      "Epoch 37/50\n",
      "8/8 [==============================] - 129s 16s/step - loss: 3.1148e-04 - acc: 1.0000 - val_loss: 0.2431 - val_acc: 0.9700\n",
      "Epoch 38/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 7.7474e-04 - acc: 1.0000 - val_loss: 0.2444 - val_acc: 0.9700\n",
      "Epoch 39/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 0.0015 - acc: 1.0000 - val_loss: 0.2410 - val_acc: 0.9700\n",
      "Epoch 40/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 4.4013e-04 - acc: 1.0000 - val_loss: 0.2363 - val_acc: 0.9700\n",
      "Epoch 41/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 0.0034 - acc: 0.9975 - val_loss: 0.2366 - val_acc: 0.9700\n",
      "Epoch 42/50\n",
      "8/8 [==============================] - 134s 17s/step - loss: 6.3670e-04 - acc: 1.0000 - val_loss: 0.2377 - val_acc: 0.9700\n",
      "Epoch 43/50\n",
      "8/8 [==============================] - 138s 17s/step - loss: 7.3957e-04 - acc: 1.0000 - val_loss: 0.2389 - val_acc: 0.9700\n",
      "Epoch 44/50\n",
      "8/8 [==============================] - 141s 18s/step - loss: 0.0015 - acc: 1.0000 - val_loss: 0.2376 - val_acc: 0.9700\n",
      "Epoch 45/50\n",
      "8/8 [==============================] - 134s 17s/step - loss: 0.0031 - acc: 0.9975 - val_loss: 0.2375 - val_acc: 0.9700\n",
      "Epoch 46/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 3.5567e-04 - acc: 1.0000 - val_loss: 0.2474 - val_acc: 0.9700\n",
      "Epoch 47/50\n",
      "8/8 [==============================] - 132s 16s/step - loss: 0.0045 - acc: 0.9975 - val_loss: 0.2563 - val_acc: 0.9700\n",
      "Epoch 48/50\n",
      "8/8 [==============================] - 132s 16s/step - loss: 0.0025 - acc: 1.0000 - val_loss: 0.2758 - val_acc: 0.9700\n",
      "Epoch 49/50\n",
      "8/8 [==============================] - 130s 16s/step - loss: 0.0080 - acc: 0.9950 - val_loss: 0.2922 - val_acc: 0.9700\n",
      "Epoch 50/50\n",
      "8/8 [==============================] - 131s 16s/step - loss: 4.7076e-04 - acc: 1.0000 - val_loss: 0.2875 - val_acc: 0.9700\n"
     ]
    }
   ],
   "source": [
    "# 开始用train set来微调模型的参数\n",
    "print('start to fine-tune my model')\n",
    "my_model=build_model()\n",
    "history_ft = my_model.fit_generator(\n",
    "        train_generator,\n",
    "        steps_per_epoch=train_samples_num // batch_size,\n",
    "        epochs=epochs,\n",
    "        validation_data=val_generator,\n",
    "        validation_steps=val_samples_num // batch_size)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 画图，将训练时的acc和loss都绘制到图上\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "def plot_training(history):\n",
    "    plt.figure(12)\n",
    "    \n",
    "    plt.subplot(121)\n",
    "    train_acc = history.history['acc']\n",
    "    val_acc = history.history['val_acc']\n",
    "    epochs = range(len(train_acc))\n",
    "    plt.plot(epochs, train_acc, 'b',label='train_acc')\n",
    "    plt.plot(epochs, val_acc, 'r',label='test_acc')\n",
    "    plt.title('Train and Test accuracy')\n",
    "    plt.legend()\n",
    "    \n",
    "    plt.subplot(122)\n",
    "    train_loss = history.history['loss']\n",
    "    val_loss = history.history['val_loss']\n",
    "    epochs = range(len(train_loss))\n",
    "    plt.plot(epochs, train_loss, 'b',label='train_loss')\n",
    "    plt.plot(epochs, val_loss, 'r',label='test_loss')\n",
    "    plt.title('Train and Test loss')\n",
    "    plt.legend()\n",
    " \n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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2rlzZz18+LBu2rRJmzZtqi+++KIePHhQ09PTdeHChaqqumvXLs3NzdUJEybokCFDNDc3V1ULXykrnFgrZ8Vxb9cE3vTSFwBtAmmjvf1rgAvDy4Z/Yt3b998fWg0rePk2bVIdPlz1668jl9u3L1TuggtUjxxRff552+7aVTU1VXX79oLllixRrV7d8k2dGrnuRx+19PHjVS+/3L7PnBk577Rpll6jhuqxx6r+6U+qKSmqF12k6v3rVNXs++IL1REjVH/5S9XPPrN90diyRTUjw+quWVN14EDVJk1UW7a065SXp3r33aFrkJqqeu65qv/5T/Q6E8ncuaqtWql26qS6eHH0fIcP27W76irV885TXbTI9u/Zo3r22bagX1qa/W3b1q6dL1UXXaRav75qYIG5AhDnylnxCH4KsA44EagBLAVOC8vzFjDU+34u8EogbU88hvifUhX9e++1U161qmjlxo2zcjNmlI5dEShv0VdVvfbaa7VDhw46cuRIHTdunHbs2FE7duyoZ5xxhmZlZekHH3ygnTp10i5dumiPHj10kXcXP/XUU3rKKafoOeecE7XuoUOH6qmnnqoXXXSRDh48WF988UVVVV24cKH27t1bO3furL1799bdu3drbm6u3nPPPdq+fXvt3LmzPv3003GfQ2GiH+e9/WvgOe/7NcCb3vfTvPw1gXSvnhQtwb39wQd2m51wQuEiGInjjzcB92/t3FzVk0+2+jIyopd74w3V556Lnj5rVkhMGzVSveUW1UOHIuc9cEC1aVMTv6ws2zdhgpUdNkz1ySdtxVLfrrQ01bp17fvpp6v+6leq11yjOmiQ6p13qr75pur06SbuNWpY+T17rN7MTNUGDVTT0+0hAKp33WUC/LvfqZ54ou37+c9Vly1Tfe011Ysvtv333ae6enVB+3ftUl2xwtK2bLHz3LhRdeFCs2XMGKvjZz+zB/TMmXYsERPp5s1NqEePVv34Y9XZs1Xfe0/1r39Vvf561datzaaGDW311pQUq8cX/Ndftwf8ffep1qun+vjjIdu++sry3HNP9P9VIkX/TGBGYHs0MDoszwq/dQ8IsCuQVnFE/6GH7JQ3bSpauVdesXJeC7QsqAiiXxWIIfrx3NszgDO979WBrd49ni9vMF+0T6x7e/duE+5f/KLo5/nAA6reUsJHeestu20nTSp6fT6HD5twLV9u32OxdavqwYP59/ltLV/wzj9f9YUXVHfssHOeMEG1Sxd7YLRrZ99r1w6VOfHEyC3ohQvtoZGSYnUEOXhQ9W9/Uz3mmFA9LVvactf+281JJ9kDqF07s8vPF+2TkqLasaOJfmpqaP/w4fYw2r5d9aabIpdt0cIeGK+/rrp/f/68vuAHifTQv/lmO260l+h4RT+ejtwWwIbAdjbQOyzPUmAI8CQwGKgrIo1UdRuQJiKLgTzgEVV9N/wAIjIcGA7QKhFRo6Jx9dU2rs0fyxYvGRnwu9/ZMEdHVSKee/toHlXNE5GdQCNv/xdhZVuEH6Ao93adOjae/rTTinYSAJG6U4YMsU7hM88sen0+1arBJZfEnz/SWIdHH7XRRE2awHHHFeyAve02+wTJzbVRyqtXw89/HpofGaRnT+uz2L8/NGfAp0YNuO8+uO4666vo3ds6n6tVg02brGN8yRLbFrFhqm3aWP+IqoWv3rHDzqdlSxvqeuqpoY7UPXvs2tarZ/0XPpMmWV/Gli1mQ61a0LZtwe7AtDTLe+ONdrz+/fOnR+rCGjvWzrNly4JpRUHsAVFIBpErMX/lLd72DUAvVb0zkKc58Az2mjsfewB0UNWdItJcVTeKyInAHOA8VV0X7Xg9evTQxYsXl+ysqgCrVq2iffv25W1GienduzcHw6Z0vvLKK3Tq1KlMjh/pOorIElXtEee9vcLLk+1trwN6AWOBz1X1VW//C8A0VX07mi3u3naUJv59HStfPC39bCAYXLUlkC96t6puBC73DlwHGKKqOwNpqOp6EZkHdMP8n44kYMGCBeVtQmHEvLcDebJFpDpQH8iJs6zDUeGIZ8jmIqCdiKSLSA2sM2tqMIOINBYRv67RwCRvfwMRqennAfoAhYR8cgSJ9RbmKJw4rl/Me9vb9qc6XQHM8fynU4FrRKSmiKQD7YCFCTPe4SglYoq+quYBI7COqlXAZFVdISJjRcT39p0DrBGRr4HjgIe8/e2BxSKyFJiL+fSd6MdBWloa27Ztc8JfTFSVbdu2kVbIbJY47+0XgEYikgX8FhjllV0BTMYaMR8Ad6jq4VI7IYcjQcT06Zc1zu9p5Obmkp2dzYEDB8rblEpLWloaLVu2JDVsxlG8vs9E4+5tR2mSSJ++oxxITU0lPT29vM1wOBxVjOQKw+BwOBxJjhN9h8PhSCKc6DscDkcSUeE6ckVkCxBtxc/G2DT4qkxVP8eKcH6tVbVJWR80ye/tqn5+UP7nGNd9XeFEvzBEZHF5jLooS6r6OVb18ysuVf26VPXzg8pzjs6943A4HEmEE32Hw+FIIiqb6E8sbwPKgKp+jlX9/IpLVb8uVf38oJKcY6Xy6TscDoejZFS2lr7D4XA4SoATfYfD4UgiKo3oi8hAEVkjIlkiMqq87SkpInKCiMwVkVUiskJE7vL2NxSRD0Vkrfe3QXnbWhJEJEVEvhSR/3jb6SKywDu/N72QxklLVbuvwd3bFf3erhSiLyIpwHggA1uQ+loRKcaichWKPOBeVW0PnAHc4Z3TKGC2qrYDZnvblZm7sLDFPn8FnvDObztwc7lYVQGoovc1uHu7Qt/blUL0seXpslR1var+//buWCWuIIzi+P+DCFYSsBDRwvewE2xWUQs7CXkFSRHxDVJJHiAWFoEUGsgL2KdQ7Cx8gCVWQTuLnBQzxUJWot6L987c84OFvXenmNn59mNYlj0PwDdgu+M5NSJpLOkyP78nFc8SaV0nedgJsNPNDJuLiGVgA/iSrwNYA07zkKLX14Lq6hpc23lIb9dXStOfFmD9Twh1qSJihRQj+RNYkDSG9OEBnpni3iufgY/An3w9D/zO4SVQ2T6+QNV1Da7tLib2P6U0/SnZ8FTxW9OcKXwG7Eu663o+bYmITeBW0sXk7SlDq9jHF6r6/XBt93MvSwlRqTKEOiJmSB+Kr5K+59u/ImJR0jgiFoHb7mbYyCqwFREjYBaYI52O3kbEm3wiqmIfG6iyrsG1TY/3spST/lMCrIuSvwM8Bq4lHU28NBnE/R748dpza4OkQ0nLklZI+3UuaY+UlbybhxW7vpZUV9fg2s7Deru+Ipr+YwHW3c6qsVXgHbAWEVf5MQI+AesRcQOs5+uaHAAfctD4PKk5DFKldQ2u7V7Xtv+GwcxsQIo46ZuZWTvc9M3MBsRN38xsQNz0zcwGxE3fzGxA3PTNzAbETd/MbED+Ak+lDQK/qgdPAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_training(history_ft)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
